A virtual data center is implemented using entities such as physical hosts, virtual machines, storage devices, storage area networks, and applications running on the virtual machines. A configuration involving the various entities of the virtual datacenter may undergo considerable changes over a period of time. For example, there may be a change in the configuration when a virtual machine is added or deleted. In addition, there may be changes in physical inventory, where physical hosts are added and/or deleted. There may also be a change when a virtual data store is added or deleted.
Elasticity is an important feature of virtual data centers. Elasticity refers to the ability to scale up or down applications to handle changing workload conditions. Typically, a virtual data center provides scaling based on resource thresholds set by a user. These thresholds are static values determined, generally, at the initialization of the virtual data center. The thresholds are commonly based on specific conditions (e.g., average processor usage >70%), and are set by the user. However, scaling based on virtual machine resource usage is not sufficient to scale multi-tier applications. Additionally, applications that involve multiple tiers often have complicated dependencies, further complicating a determination of which tier and resource (CPU, memory, storage etc.) to scale.